Skip to main content

Adding Images to Blog Content

Version 2.0 Standard: Premium

A blog post with zero images is a blog post that gets skimmed once and abandoned. Images are not decoration — they are retention engines. They break reading fatigue, create visual anchors in the F-pattern scan, and open a second traffic channel through Google Image Search that most writers completely ignore.

The goal is not to "add images." The goal is to place the right image at the exact moment the reader's brain needs a mental break.


Part 1 — What Google Actually Reads in an Image

Google cannot see your image. It reads the signals around it. Most bloggers get this wrong — they upload a beautiful photo and call it done. The SEO value lives in the metadata.

SignalWhat it isYour Control
Alt textA text description of the imageDirect — you write it
File nameThe filename before you uploadDirect — rename before upload
CaptionThe text immediately below the imageDirect — add one
Surrounding textThe paragraph above and belowIndirect — structured content
The most common mistake

Uploading a photo named IMG_20250115_083412.jpg. Google's crawler indexes the filename as a keyword signal. IMG_20250115_083412.jpg ranks for nothing. content-formatting-checklist-example.webp is crawlable and discoverable.

Rename every image before it leaves your desktop.


Part 2 — The Right Image for the Right Moment

Choosing where to place an image is more important than choosing which image to use. Use the "Show Don't Tell" rule: place an image at the exact moment the text introduces something easier to show than to explain.

flowchart TD
A["Writing a section"] --> B{"Can I show this\nfaster than I can tell it?"}
B -- No --> C["Use prose — no image needed"]
B -- Yes --> D{"What type of visual?"}
D --> E["Data/Stats → Screenshot or Chart"]
D --> F["Process/Steps → Annotated Screenshot"]
D --> G["Comparison → Side-by-side image"]
D --> H["Concept → Diagram or Infographic"]

The 3 High-Value Image Types for Blogs

When to use: Tutorials, how-to posts, tool reviews.

An annotated screenshot is the highest-trust image in blog writing. It proves you actually did the thing. A stock photo proves nothing.

The pattern:

  1. Take a screenshot of the actual tool, dashboard, or result.
  2. Add a red arrow or circle annotation pointing to the key element.
  3. Write an alt text that describes both the UI and the action.
![Google Search Console Performance report showing a filtered view for a single target URL with CTR at 4.2%](/img/gsc-performance-filtered-url.webp)

Part 3 — Writing Alt Text That Ranks

Alt text is a 125-character slot where you describe the image for both visually impaired readers (accessibility) and Google Image Search (SEO). Most bloggers either leave it empty or stuff it with keywords. Both are wrong.

The Formula

[Type of visual] + [Subject and what it shows] + [Natural keyword if appropriate]
![](/img/chart.webp)

Empty — zero SEO value, accessibility failure.

![SEO SEO tips blog content optimization ranking](/img/chart.webp)

Keyword stuffed — triggers spam filters, penalized by Google.

![Image showing SEO](/img/chart.webp)

Too vague — "image" is redundant (Google knows it's an image). "SEO" has no context.


Part 4 — Image Placement Rules

Placing images correctly increases dwell time. Placing them incorrectly breaks the reading flow and reduces time on page.

PlacementEffectVerdict
Hero image at the top (relevant)Sets context, reduces bounceUse it
Generic stock photo at the topIncreases LCP load time, adds no valueAvoid
Image directly after the concept it illustratesConfirms understanding, increases scroll depthBest practice
Image dropped randomly between unrelated paragraphsBreaks cognitive flowNever do this
Three images back-to-backCauses image fatigue, user starts skippingSpread them out
The "every scroll depth" rule

Place at least one visual element (image, diagram, callout, or table) for every 300–400 words of body text. This matches the average smartphone scroll depth — the user should never see an unbroken wall of text that fills more than one full mobile screen.


Part 5 — MDX Implementation Reference

These are the three syntax patterns you will use in Docusaurus MDX blog posts:

Standard image (responsive markdown):

![Your descriptive alt text here](/img/your-filename.webp)

Image with controlled width (JSX):

<img
src="/img/your-filename.webp"
alt="Your descriptive alt text here"
style={{ width: '100%', maxWidth: '720px', display: 'block', margin: '0 auto' }}
/>

External image:

![Alt text for the external image](https://example.com/path/to/image.webp)
Use maxWidth, not a fixed width

A fixed pixel width like width="500px" breaks on mobile. maxWidth: '720px' scales the image down for smaller screens while capping it on desktop. Always use maxWidth.


Part 6 — Output Checklist

Before publishing, verify every image in the post:

  • File name is descriptive and lowercase-with-hyphens (not IMG_0045.jpg).
  • Alt text follows the formula: type + subject + natural keyword.
  • Format is WebP whenever possible (smallest file, best quality-to-size ratio).
  • File size is under 150KB (compress at Squoosh.app if needed).
  • Placement is at the exact point where the image explains or confirms the adjacent text.
  • No image is purely decorative — every image must add informational value.